home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / AMOS / VR_TAPSv1_2 / Uncode_proc.AMOS / Uncode_proc.amosSourceCode
Encoding:
AMOS Source Code  |  1997-03-06  |  5.5 KB  |  297 lines

  1. '
  2. ' VR T.A.P.S. - The AMOS Protection System 
  3. '
  4. '            By James Kaylor 
  5. '
  6. '          Freely distributable    
  7. '
  8. ' TAPS 1997 - Version 1.2  
  9. '
  10. '
  11. ' The following procedures are Copyright 1997 James Kaylor 
  12. ' and are NOT to be UNLOCKED and/or changed in ANY way.
  13. ' ---------------------------------------------  
  14. Procedure UNCODE[FILENAME$,BANK,PASSWORD$]
  15. '
  16. F$=FILENAME$
  17. Open In 1,F$
  18. L=Lof(1)
  19. Close 1
  20. Erase 10
  21. Reserve As Data 10,L
  22. Bload F$,10
  23. If Left$(PASSWORD$,1)="P"
  24.    FLAG$="ILBM"
  25.    Left$(PASSWORD$,1)="7"
  26.        For I=41 To 200
  27.          Add CD,1,1 To Len(PASSWORD$)
  28.          CODE=Val(Mid$(PASSWORD$,CD,1))
  29.          C=Peek(Start(10)+I)
  30.          Ror.b CODE,C
  31.          Poke Start(10)+I,Asc(Chr$(C))
  32.        Next I
  33. End If 
  34. If Left$(PASSWORD$,1)="T"
  35.    II=-100
  36.    Left$(PASSWORD$,1)="9"
  37. End If 
  38. '
  39. CD=0
  40. If L>39
  41.  For I=0 To 19
  42.   Add CD,3,1 To Len(PASSWORD$)
  43.   CODE=Val(Mid$(PASSWORD$,CD,1))
  44.   C=Peek(Start(10)+I)
  45.   Ror.b CODE,C
  46.   Poke Start(10)+I,Asc(Chr$(C))
  47.  Next I
  48.  For I=20 To 31
  49.   Add CD,4,1 To Len(PASSWORD$)
  50.   CODE=Val(Mid$(PASSWORD$,CD,1))
  51.   C=Peek(Start(10)+I)
  52.   Ror.b CODE,C
  53.   Poke Start(10)+I,Asc(Chr$(C))
  54.  Next I
  55.  For I=32 To 40
  56.   Add CD,2,1 To Len(PASSWORD$)
  57.   CODE=Val(Mid$(PASSWORD$,CD,1))
  58.   C=Peek(Start(10)+I)
  59.   Ror.b CODE,C
  60.   Poke Start(10)+I,Asc(Chr$(C))
  61.  Next I
  62. End If 
  63. I=41
  64. If II<>-100
  65. II=Val(Mid$(PASSWORD$,1,2))
  66.   If II<15 or II>45
  67.     II=15
  68.   End If 
  69. End If 
  70. If II=-100
  71.    II=3
  72. End If 
  73. Repeat 
  74.  If I<L-2
  75.   Add CD,1,1 To Len(PASSWORD$)
  76.   If CODE>2 and CODE<7
  77.      Add CD,-2,1 To Len(PASSWORD$)
  78.   End If 
  79.   If CODE>0 and CODE<3
  80.      Add CD,2,1 To Len(PASSWORD$)
  81.   End If 
  82.   CODE=Val(Mid$(PASSWORD$,CD,1))
  83.   C=Peek(Start(10)+I)
  84.   Ror.b CODE,C
  85.   Poke Start(10)+I,Val(Bin$(C,8))
  86.  End If 
  87.   Add I,II
  88. Until I>L-2
  89. '
  90. If II=3
  91.    Left$(PASSWORD$,1)="T"
  92.    PW$=PASSWORD$
  93. End If 
  94. ' -------------
  95. 'If FLAG$="ILBM" 
  96. '   I=-1 
  97. '   II=8 
  98. '  Else  
  99. '   I=0
  100. '   II=17
  101. 'End If  
  102. If BANK>-1 and BANK<17
  103. Bsave "ram:f",Start(10) To Start(10)+Length(10)
  104. Erase 10
  105. If FLAG$<>"ILBM"
  106. Erase BANK
  107.  If II<>3
  108.     If BANK>0
  109.      Load "ram:f",BANK
  110.     End If 
  111.    Else 
  112.     If BANK>0
  113.      Reserve As Data BANK,L
  114.      Bload "ram:f",BANK
  115.     End If 
  116.  End If 
  117.  Else 
  118.   If BANK<8
  119.    Load Iff "ram:f",BANK
  120.   End If 
  121. End If 
  122. Kill "ram:f"
  123. End If 
  124. Erase 10
  125. FLAG$=""
  126. '
  127. End Proc
  128. Procedure UNCODE_BANK[FROM_BANK,BANK,PASSWORD$]
  129. '
  130. L=Length(FROM_BANK)
  131. If Left$(PASSWORD$,1)="P"
  132.    FLAG$="ILBM"
  133.    Left$(PASSWORD$,1)="7"
  134.        For I=41 To 200
  135.          Add CD,1,1 To Len(PASSWORD$)
  136.          CODE=Val(Mid$(PASSWORD$,CD,1))
  137.          C=Peek(Start(FROM_BANK)+I)
  138.          Ror.b CODE,C
  139.          Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  140.        Next I
  141. End If 
  142. If Left$(PASSWORD$,1)="T"
  143.    II=-100
  144.    Left$(PASSWORD$,1)="9"
  145. End If 
  146. '
  147. CD=0
  148. If L>39
  149.  For I=0 To 19
  150.   Add CD,3,1 To Len(PASSWORD$)
  151.   CODE=Val(Mid$(PASSWORD$,CD,1))
  152.   C=Peek(Start(FROM_BANK)+I)
  153.   Ror.b CODE,C
  154.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  155.  Next I
  156.  For I=20 To 31
  157.   Add CD,4,1 To Len(PASSWORD$)
  158.   CODE=Val(Mid$(PASSWORD$,CD,1))
  159.   C=Peek(Start(FROM_BANK)+I)
  160.   Ror.b CODE,C
  161.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  162.  Next I
  163.  For I=32 To 40
  164.   Add CD,2,1 To Len(PASSWORD$)
  165.   CODE=Val(Mid$(PASSWORD$,CD,1))
  166.   C=Peek(Start(FROM_BANK)+I)
  167.   Ror.b CODE,C
  168.   Poke Start(FROM_BANK)+I,Asc(Chr$(C))
  169.  Next I
  170. End If 
  171. I=41
  172. If II<>-100
  173. II=Val(Mid$(PASSWORD$,1,2))
  174.   If II<15 or II>45
  175.     II=15
  176.   End If 
  177. End If 
  178. If II=-100
  179.    II=3
  180. End If 
  181. Repeat 
  182.  If I<L-2
  183.   Add CD,1,1 To Len(PASSWORD$)
  184.   If CODE>2 and CODE<7
  185.      Add CD,-2,1 To Len(PASSWORD$)
  186.   End If 
  187.   If CODE>0 and CODE<3
  188.      Add CD,2,1 To Len(PASSWORD$)
  189.   End If 
  190.   CODE=Val(Mid$(PASSWORD$,CD,1))
  191.   C=Peek(Start(FROM_BANK)+I)
  192.   Ror.b CODE,C
  193.   Poke Start(FROM_BANK)+I,Val(Bin$(C,8))
  194.  End If 
  195.   Add I,II
  196. Until I>L-2
  197. '
  198. If II=3
  199.    Left$(PASSWORD$,1)="T"
  200.    PW$=PASSWORD$
  201. End If 
  202. ' -------------
  203. 'If FLAG$="ILBM" 
  204. '   I=-1 
  205. '   II=8 
  206. '  Else  
  207. '   I=0
  208. '   II=17
  209. 'End If  
  210. If BANK>-1 and BANK<17
  211. Bsave "ram:f",Start(FROM_BANK) To Start(FROM_BANK)+Length(FROM_BANK)
  212. Erase FROM_BANK
  213. If FLAG$<>"ILBM"
  214. Erase BANK
  215.  If II<>3
  216.    If BANK>0
  217.     Load "ram:f",BANK
  218.    End If 
  219.    Else 
  220.    If BANK>0
  221.     Reserve As Data BANK,L
  222.     Bload "ram:f",BANK
  223.    End If 
  224.  End If 
  225.  Else 
  226.   If BANK<8
  227.    Load Iff "ram:f",BANK
  228.   End If 
  229. End If 
  230. Kill "ram:f"
  231. End If 
  232. FLAG$=""
  233. '
  234. End Proc
  235. Procedure FILE_LOAD[FILENAME$,BANK]
  236. Open In 1,FILENAME$
  237. L=Lof(1)
  238. Close 1
  239. Erase BANK
  240. Reserve As Data BANK,L
  241. Bload FILENAME$,BANK
  242. End Proc
  243. ' ---------------------------------------------
  244. '
  245. '
  246. ' BANK_2_A$ is used to grab text out of a bank once you've 
  247. ' decoded it with UNCODE or UNCODE_BANK. 
  248. '
  249. ' BANK = The bank where the text is stored.
  250. ' ---------------------------------------------  
  251. Procedure BANK_2_A$[BANK]
  252.   Shared A$
  253.   If Length(BANK)<1 Then Pop Proc
  254.   A$=Space$(Length(BANK))
  255.   Copy Start(BANK),Start(BANK)+Length(BANK) To Varptr(A$)
  256. End Proc
  257. ' ---------------------------------------------
  258. '
  259. ' Example program below: 
  260. '
  261. ' * Make sure you have "Coded" and "Amiga.pic" in RAM: from this archive!  
  262. '
  263. '
  264. UNCODE["ram:coded",11,"T1111111111"]
  265. ' /\ --- Coded file is loaded and stored in bank 11 ---  
  266. FILE_LOAD["ram:amiga.pic",12]
  267. ' /\ --- Coded ILBM is loaded and stored in bank 12 ---  
  268. BANK_2_A$[11]
  269. ' /\ --- Bank contents are put into A$ --- \/
  270. Hide On 
  271. Screen Open 0,640,200,2,Hires
  272. Curs Off 
  273. Colour 1,$FFF
  274. Print A$
  275. Print 
  276. Print 
  277. Print "                               - Press a key -"
  278. Wait Key 
  279. Cls 0
  280. Locate 0,0
  281. Print "Loading picture. Please wait..."
  282. ' --- This will take some time unless COMPILED! ---
  283. Auto View Off 
  284. UNCODE_BANK[12,0,"P1112223334"]
  285. Screen Display 0,,40,,
  286. Screen Open 1,16,16,16,Lowres
  287. Get Palette(0)
  288. Screen Hide 1
  289. Screen 0
  290. For I=0 To 15
  291.     Colour I,$0
  292. Next I
  293. View 
  294. Wait Vbl 
  295. Fade 4 To 1
  296. Wait Key 
  297. Fade 4